package db

import (
	"database/sql"
	mydb "filestore-server/db/mysql"
	"log"
)

// OnFileUploadFinished 新增文件信息
func OnFileUploadFinished(filehash string, filename string, filesize int64, fileadd string) bool {
	// 预编译SQL
	stmt, err := mydb.DBConn().Prepare(`insert into tbl_file (file_sha1, file_name, file_size, file_addr, status) values (?,?,?,?,1)`)
	if err != nil {
		log.Fatalf("SQL编译错误！err: %v", err)
		return  false
	}

	defer stmt.Close()

	// 执行SQL
	ret, err := stmt.Exec(filehash, filename, filesize, fileadd)
	if err != nil {
		log.Fatalf("SQL异常! err: ", err)
		return false
	}

	// 获取返回受影响的行数
	if ft, err := ret.RowsAffected(); nil == err {
		if ft <= 0 {
			log.Printf("数据已经插入，但未更新行数！可能数据已经存在！filehash: %s", filehash)
		}
		return true
	}

	return false
}


type TableFile struct {
	FileHash string
	FileName sql.NullString
	FileSize sql.NullInt64
	FileAddr sql.NullString
	Suc bool // 是否有数据
}

// GetFileMeta 获取文件
func GetFileMeta(filehash string) (*TableFile, error) {
	// 预编译SQL
	stmt, err := mydb.DBConn().Prepare(`select file_sha1,file_addr,file_name,file_size from tbl_file where file_sha1 = ? and status = 1 limit 1`)
	if err != nil {
		log.Fatalf("SQL编译出错！err:%v", err)
		return nil, err
	}
	defer stmt.Close()

	tfile := &TableFile{}

	// 执行SQL查询一行，设置SQL查询参数，并获取结果
	err = stmt.QueryRow(filehash).Scan(&tfile.FileHash, &tfile.FileAddr, &tfile.FileName, &tfile.FileSize)
	if err != nil {
		log.Fatalf("SQL错误！err:%v", err)
		return nil, err
	}

	// 是否有值
	if tfile.FileHash != "" {
		tfile.Suc = true
	}
	return tfile, nil
}

// GetByUserFileList 获取用户文件列表
func GetByUserFileList(username string, limit int) (*[]map[string]interface{}, error) {
	stmt, err := mydb.DBConn().Prepare(`select * from tbl_user_file where user_name = ? limit ?`)
	if err != nil {
		log.Fatalf("SQL编译出错! err:%v", err)
		return nil, err
	}
	defer stmt.Close()

	rows, err := stmt.Query(username, limit)
	if err != nil {
		log.Fatalf("SQL执行失败！err:%v", err)
		return nil, err
	}

	pRows := mydb.ParseRows(rows)
	return &pRows, nil
}